package hello;

/**
 * Created with IntelliJIDEA.
 * Description:
 * User: ASUS
 * Date: 2025/9/2
 * Time: 16:41
 */
import java.util.Properties;
import java.io.FileInputStream;

// 模拟一个需要从配置文件加载信息的类
class AppConfig {
    // 声明一个静态的 Properties 对象，用于存储配置
    public static final Properties CONFIG;

    // 使用静态代码块来初始化 CONFIG
    static {
        // 打印一条消息，证明静态块被执行了
        System.out.println("Static initializer block is running...");

        // 实例化对象
        CONFIG = new Properties();

        try {
            // 假设项目根目录下有一个 config.properties 文件
            // 静态块中可以包含复杂的逻辑，如 try-catch
            FileInputStream fis = new FileInputStream("config.properties");
            CONFIG.load(fis);
        } catch (Exception e) {
            // 处理可能发生的异常
            System.err.println("Failed to load config file.");
            e.printStackTrace();
        }
    }
}

public class StaticInitTest {
    public static void main(String[] args) {
        // 我们甚至不需要创建 AppConfig 的对象
        // 只要我们第一次使用这个类（比如访问它的静态成员），静态块就会被执行
        System.out.println("Main method started.");

        // 访问 AppConfig 的静态成员 CONFIG
        // 这会触发 AppConfig 类的加载，进而执行静态代码块
        String version = AppConfig.CONFIG.getProperty("version", "1.0");
        String author = AppConfig.CONFIG.getProperty("author", "Unknown");

        System.out.println("App Version: " + version);
        System.out.println("App Author: " + author);
    }
}
